home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 October: Mac OS SDK / Dev.CD Oct 96 SDK / Dev.CD Oct 96 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Framewrk / FWPart / Include / FWScrolr.h < prev    next >
Encoding:
Text File  |  1996-08-16  |  8.1 KB  |  261 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWScrolr.h
  4. //    Release Version:    $ ODF 1 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #ifndef FWSCROLR_H
  11. #define FWSCROLR_H
  12.  
  13. #ifndef FWSVIEW_H
  14. #include "FWSView.h"
  15. #endif
  16.  
  17. // ----- OS Layer -----
  18.  
  19. #ifndef FWPOINT_H
  20. #include "FWPoint.h"
  21. #endif
  22.  
  23. // ----- Foundation Layer -----
  24.  
  25. #ifndef FWRECEVR_H
  26. #include "FWRecevr.h"
  27. #endif
  28.  
  29. //========================================================================================
  30. // Forward declarations
  31. //========================================================================================
  32.  
  33. class FW_CPoint;
  34. class FW_CFrame;
  35. class FW_CScrollBar;
  36. class ODFacet;
  37.  
  38. //========================================================================================
  39. // CLASS FW_CPrivBaseScroller
  40. //========================================================================================
  41. // This class is only here for better dead-stripping. Because FW_CFrame calls UpdateScrollParameters
  42. // and I don't want the whole FW_CScroller class to be dragged in I am in fact using this class
  43. // in FW_CFrame
  44.  
  45. class FW_CPrivBaseScroller
  46. {
  47. public:
  48.     FW_DECLARE_CLASS
  49.  
  50.     FW_CPrivBaseScroller();
  51.     virtual ~FW_CPrivBaseScroller();
  52.  
  53. public:
  54.     virtual void            InitializeAutoScroll(Environment* ev) = 0;
  55.     virtual FW_CPoint        AutoScrollOffset(Environment* ev, 
  56.                                     const FW_CPoint& currentPoint,
  57.                                     unsigned long delay = 0) = 0;
  58.     virtual void            ScrollBy(Environment* ev, 
  59.                                     const FW_CPoint& offset,
  60.                                     FW_CGraphicContext* gc = NULL) = 0;
  61.  
  62.     virtual void            UpdateScrollParameters(Environment* ev, FW_Boolean notify = TRUE) = 0;
  63.  
  64.     // ----- Archiving -----
  65.     static void*             Create(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  66.     static void                Destroy(void* object, FW_ClassTypeConstant type);
  67.     static void                Read(FW_CReadableStream& stream, FW_ClassTypeConstant type, void* object);
  68.     static void             Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
  69.  
  70. #ifdef FW_DEBUG
  71. public:
  72.     virtual void            PrivCheckFrame(Environment* ev) const;
  73. #endif    
  74. };
  75.  
  76. //========================================================================================
  77. // CLASS FW_CScroller
  78. //========================================================================================
  79.  
  80. class FW_CScroller : public FW_CPrivBaseScroller, public FW_MReceiver
  81. {
  82. public:
  83.     FW_DECLARE_CLASS
  84.     FW_DECLARE_AUTO(FW_CScroller)
  85.  
  86.     enum EAutoScrollStage
  87.     {
  88.         kOutStage         = 0,
  89.         kDelayStage     = 1,
  90.         kScrollStage     = 2
  91.     };
  92.     
  93. // ----- Constructors/Destructors
  94. public:
  95.     FW_CScroller(Environment* ev, FW_CFrame* frame);
  96.     virtual ~FW_CScroller();
  97.         
  98. protected:
  99.     FW_CScroller(Environment* ev);
  100.  
  101. public:
  102.     // ----- Notification -----
  103.     
  104.     void                    RegisterScrollNotifier(Environment* ev, 
  105.                                     FW_MNotifier* notifier);
  106.     void                    UnregisterScrollNotifier(Environment* ev, 
  107.                                     FW_MNotifier* notifier);
  108.     virtual void            HandleNotification(Environment* ev, 
  109.                                     const FW_CNotification& notification);
  110.     
  111.     // ----- Srolling/Scalling -----
  112.     void                    ScaleBy(Environment* ev, 
  113.                                     const FW_CPoint& scaling,
  114.                                     FW_CGraphicContext* gc = NULL);
  115.     virtual void            ScrollBy(Environment* ev, 
  116.                                     const FW_CPoint& offset,
  117.                                     FW_CGraphicContext* gc = NULL);
  118.  
  119.     // ----- AutoScrolll -----
  120.     virtual void            InitializeAutoScroll(Environment* ev);
  121.     virtual FW_CPoint        AutoScrollOffset(Environment* ev, 
  122.                                     const FW_CPoint& currentPoint,
  123.                                     unsigned long delay = 0);
  124.     void                    AutoScroll(Environment* ev, 
  125.                                     const FW_CPoint& previousPoint, 
  126.                                     FW_CGraphicContext* gc = NULL,
  127.                                     unsigned long delay = 0);
  128.     void                    SetAutoScrollIncrement(Environment* ev, 
  129.                                     const FW_CPoint& increment);
  130.     void                    SetAutoScrollInset(Environment* ev, 
  131.                                     FW_Fixed inset);
  132.  
  133.  
  134.     // ----- Scroll Parameters -----
  135.     virtual void            UpdateScrollParameters(Environment* ev, 
  136.                                     FW_Boolean notify = TRUE);
  137.     virtual void            ScrollPositionChanged(Environment* ev);
  138.  
  139.     virtual void            GetScrollUnits(Environment* ev,
  140.                                     FW_Fixed& minor,
  141.                                     FW_Fixed& major,
  142.                                     FW_XYSelector direction);
  143.                                     
  144.     // ----- Archiving -----
  145.     static void*             Create(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  146.     static void                Destroy(void* object, FW_ClassTypeConstant type);
  147.     static void                Read(FW_CReadableStream& stream, FW_ClassTypeConstant type, void* object);
  148.     static void             Write(FW_CWritableStream& stream, FW_ClassTypeConstant type, const void *object);
  149.  
  150.     virtual void            Flatten(Environment*ev, FW_CWritableStream& stream) const;
  151.     virtual void            InitializeFromStream(Environment*ev, FW_CReadableStream& stream);
  152.     
  153. protected:
  154.     void                    ScrollDraw(Environment* ev, 
  155.                                     ODFacet* facet, 
  156.                                     const FW_CPoint& by);
  157.     
  158.     void                    PrivChangeOffset(Environment* ev, 
  159.                                     const FW_CPoint& offset, 
  160.                                     FW_Boolean scroll = TRUE);
  161.     ODShape*                PrivAcquireContentScrollShape(Environment* ev, 
  162.                                     FW_Boolean horizontalScroll, 
  163.                                     FW_Boolean verticalScroll) const;
  164.     
  165.     void                    PrivScrollBy(Environment* ev, const FW_CPoint& offset, FW_CGraphicContext* gc);
  166.     
  167. protected:
  168.     FW_CFrame*                fFrame;
  169.     FW_CPoint                fAutoScrollIncrement;
  170.     FW_Fixed                fAutoScrollInset;
  171.  
  172. private:
  173.     EAutoScrollStage        fAutoScrollStage;
  174.     unsigned long            fLastAutoScrollTick;
  175. };
  176.  
  177. //========================================================================================
  178. // CLASS FW_CScrollBarScroller
  179. //========================================================================================
  180.  
  181. class FW_CScrollBarScroller : public FW_CScroller
  182. {
  183. public:
  184.     FW_DECLARE_CLASS
  185.     FW_DECLARE_AUTO(FW_CScrollBarScroller)
  186.  
  187. // ----- Constructors/Destructors
  188. public:
  189.     FW_CScrollBarScroller(Environment* ev,
  190.                           FW_CFrame* frame, 
  191.                           FW_CScrollBar* horzSB, 
  192.                           FW_CScrollBar* vertSB);
  193.     virtual ~FW_CScrollBarScroller();
  194.  
  195. protected:
  196.     FW_CScrollBarScroller(Environment* ev);
  197.  
  198. public:
  199.     virtual void            UpdateScrollParameters(Environment* ev, 
  200.                                         FW_Boolean notify = TRUE);
  201.     virtual void            ScrollPositionChanged(Environment* ev);
  202.     
  203.     FW_CScrollBar*            GetScrollBar(Environment* ev, FW_XYSelector direction) const;
  204.     virtual void            RemoveScrollBar(Environment* ev, FW_XYSelector direction);
  205.  
  206.     // ----- Archiving -----
  207.     static void*             Create(FW_CReadableStream& stream, FW_ClassTypeConstant type);
  208.     static void                Destroy(void* object, FW_ClassTypeConstant type);
  209.     virtual void            Flatten(Environment*ev, FW_CWritableStream& stream) const;
  210.     virtual void            InitializeFromStream(Environment*ev, FW_CReadableStream& stream);
  211.     
  212. #ifdef FW_DEBUG
  213. public:
  214.     virtual void            PrivCheckFrame(Environment* ev) const;
  215. #endif    
  216.  
  217. protected:
  218.     FW_Boolean                PrivAdjustScrollBar(Environment* ev, 
  219.                                                 FW_XYSelector direction, 
  220.                                                 FW_Fixed visibleContent,
  221.                                                 FW_Fixed contentExtent,
  222.                                                 FW_Fixed contentOffset,
  223.                                                 FW_Boolean notify);
  224.  
  225. private:
  226.     FW_CScrollBar*            fScrollbars[2];
  227. };
  228.  
  229. //========================================================================================
  230. // Inlines
  231. //========================================================================================
  232.  
  233. //----------------------------------------------------------------------------------------
  234. // FW_CScrollBarScroller::FW_CScrollBarScroller
  235. //----------------------------------------------------------------------------------------
  236.  
  237. inline FW_CScrollBar* FW_CScrollBarScroller::GetScrollBar(Environment*, FW_XYSelector direction) const
  238. {
  239.     return fScrollbars[direction];
  240. }
  241.  
  242. //----------------------------------------------------------------------------------------
  243. // FW_CScrollBarScroller::SetAutoScrollIncrement
  244. //----------------------------------------------------------------------------------------
  245.  
  246. inline void FW_CScroller::SetAutoScrollIncrement(Environment*, const FW_CPoint& increment)
  247. {
  248.     fAutoScrollIncrement = increment;
  249. }
  250.  
  251. //----------------------------------------------------------------------------------------
  252. // FW_CScrollBarScroller::SetAutoScrollInset
  253. //----------------------------------------------------------------------------------------
  254.  
  255. inline void FW_CScroller::SetAutoScrollInset(Environment*, FW_Fixed inset)
  256. {
  257.     fAutoScrollInset = inset;
  258. }
  259.  
  260. #endif
  261.